package simulator.software;

/**
 * ProcessorRunnable defines the behaviors expected of an item that may be
 * loaded and run on a <code>Processor</code>.
 * 
 * @author Kyle Loomis
 * 
 */
public interface ProcessorRunnable
{
   /**
    * Moves this <code>ProcessorRunnable</code> forward one unit of time (step).
    */
   public void step();

   /**
    * Gets the current state of this <code>ProcessorRunnable</code>.
    * 
    * @return the state of this <code>ProcessorRunnable</code>.
    */
   public ProcessState getState();

   /**
    * Gets a brief description of the current state of this
    * <code>ProcessorRunnable</code>.
    * 
    * @return a description of this <code>ProcessorRunnable</code>'s state.
    */
   public String getStatusDescriptor();
}
